闲扯
很有价值的一道题,其中的模型转化值得借鉴。
题面
Solution
我们将问题转化一下,我们将选中一个 $1$ 看做在网格图上向右上方走一步,选中一个 $0$ 看做是向右下方走一步。
最后我们要求的就是从 $(0,0)$ 走 $n+m$ 步,走到 $(n+m,n-m)$ 的方案数。
但是我们还有一个条件:对任意前 $k$ 个字符, $1$ 的个数不少于 $0$ 的个数。
这相当于是我们不能经过 $y=-1$ 这条线。
所以我们考虑容斥,用总方案数减去经过了 $y=-1$ 的方案数。
那么问题就变成了怎么算经过了 $y=-1$ 的方案数。
我们根据对称性可以发现,从 $(0,0)$ 开始走到 $(x,-1)$ 所需的步数相当于是从 $(0,-2)$ 走到 $(x,-1)$ 的步数。(将原来的向右上走变为向左下走,向左下走变为向右上走)
我们可以发现,这样的话, $1$ 的个数多了 $1$ , $0$ 的个数少了 $1$ (只有第一次到 $y=-1$ 的时候变了 $1$ ),所以我们相当于求从 $(0,-2)$ 开始,走 $n+m$ 步,走到 $(n+m,n-m)$ 的方案数。
这样我们是可以保证一定经过了 $y=-1$ 这条线的。
所以最后的方案数就是 $C_{n+m}^m-C_{n+m}^{m-1}$ 。
Code
1 |
|